# 异步协程

import asyncio
import time

import requests

from test_queue import MysqlDb, RedisQueue
import random

# 本质就是线程

# 优点
# 用户态自主控制
# 协程性能比多线程高

# 缺点
# 属于线程,单线程,没办法利用系统的多核资源

rq = RedisQueue('testrq')
mydb = MysqlDb()


async def doout(id):
    while 1:

        uid = rq.get_wait_vip('test_vip', 1)
        # print(uid[1],id)

        if uid:
            # 修改字段   将被审批人分配给审批人

            sql = "update `test_user` set auid = %s where id = %s" % (id, uid[1])

            # print(sql)
            mydb.update(sql)

        break


# 执行方法
async def main():
    # 建立协程对象
    id = random.randint(1, 10)
    task1 = asyncio.ensure_future(doout(id))

    # 容器存放任务
    tasks = [task1]

    # 异步执行
    await asyncio.gather(*tasks)

# asyncio.run(main())
# 通过协程库执行任务
# start = time.time()
while 1:
    asyncio.run(main())
    time.sleep(10)
# print(time.time() - start, '协程')


# 动态表单
# 审核队列
# websocket
# 权限系统  acl,abac,rbac
# 位运算   &^|  >>  <<  &奇偶数
# 分表算法    key & n
# 分页优化
# 延迟双删
# 延迟队列
# 充值业务  钱包做解耦
